home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / u_man / cat1 / mkf2c.z / mkf2c
Text File  |  1998-10-30  |  18KB  |  416 lines

  1.  
  2.  
  3.  
  4. MMMMKKKKFFFF2222CCCC((((1111))))                                                              MMMMKKKKFFFF2222CCCC((((1111))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      mkf2c - generate FORTRAN-C interface routines
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      mmmmkkkkffff2222cccc [ options ] [ cprog.fc [ cprog.s ] ]
  13.  
  14. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  15.      _m_k_f_2_c is used to generate assembly-language routines to provide greater
  16.      flexibility when calling a C function from a FORTRAN routine.
  17.  
  18.      _M_k_f_2_c accepts as input a set of C functions, and produces an assembly-
  19.      language interface routine in the output file.  If the input and output
  20.      files are not specified, _m_k_f_2_c reads from _s_t_d_i_n and writes to _s_t_d_o_u_t.
  21.      The input may be a copy of the actual C file being interfaced, perhaps
  22.      filtered by the program _e_x_t_c_e_n_t_r_y(1).  The output of _m_k_f_2_c is an
  23.      assembly-language (._s) file that must be assembled with _a_s(1), and loaded
  24.      with the FORTRAN and C routines that are to be interfaced.
  25.  
  26.      The assembly-language output is KPIC code which must be assembled with
  27.      the ----KKKKPPPPIIIICCCC option to _a_s(1) unless an _u_n_s_h_a_r_e_d .o is desired.
  28.  
  29.      _M_k_f_2_c uses the parameter declarations in the C function headers to
  30.      transform each parameter of the calling language to that of the receiving
  31.      language. The standard basic C types attached to the parameters are used
  32.      to determine the object each parameter represents - i.e., whether it is a
  33.      value or pointer, its size, whether it is unsigned, etc.
  34.  
  35.      For C functions in K&R style, the opening and closing brace of the
  36.      function body must be present. Information in the body of the function is
  37.      ignored. For C functions in ANSI C function prototype style, the function
  38.      may be either a definition (and whatever is between the opening and
  39.      closing brace is ignored) or a declaration (ie, with ; rather than {}).
  40.      Function parameters in ANSI C style function prototypes need not name the
  41.      parameters.  Function parameters in ANSI C style function prototypes
  42.      cannot use typedef names to declare parameter types.
  43.  
  44.      _m_k_f_2_c expects its input to consist solely of the functions it is to
  45.      interface, comments, and lines which begin with the preprocessor control
  46.      character '#'.  It can match braces, enabling it to bound function
  47.      bodies.  It cannot, however, understand other C constructs normally
  48.      occurring at the global level (typedefs, structure declarations, data
  49.      declarations, function prototypes, etc.).  Such unrecognized constructs
  50.      must be eliminated from the input (this is the purpose of _e_x_t_c_e_n_t_r_y(1)).
  51.  
  52.      _M_k_f_2_c will ignore functions of storage class _s_t_a_t_i_c .
  53.  
  54.      The simplest way to generate an interface for a C function is to simply
  55.      hand-code a copy of the function which consists of the entry and
  56.      parameter declarations with an empty body.  This stub, which is
  57.      traditionally suffixed with ._f_c is then used as input to _m_k_f_2_c, and the
  58.      resultant ._s file is assembled and linked into the executable.  The root
  59.      name of the stub file must differ from the root name of the file
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. MMMMKKKKFFFF2222CCCC((((1111))))                                                              MMMMKKKKFFFF2222CCCC((((1111))))
  71.  
  72.  
  73.  
  74.      containing the actual C functions (so that the name of the resultant ._os
  75.      differ). NOTE: _t_h_e -KPIC _s_w_i_t_c_h _m_u_s_t _b_e _g_i_v_e_n _t_o as(_1) _u_n_l_e_s_s _t_h_e _o_b_j_e_c_t
  76.      _i_s _t_o _b_e non-shared.
  77.  
  78.           mkf2c foo.fc foo.s
  79.           as -KPIC foo.s -o foo.o
  80.  
  81.      It is also possible to create wrappers from existing C source code.  This
  82.      is done by adding special rules to your makefile and adding special
  83.      comments around each function for which an interface is to be generated.
  84.      See the example at the end of this man page.
  85.  
  86.      The options to _m_k_f_2_c(1) are the following:
  87.  
  88.      ----33332222       Generate wrappers with (old) 32-bit calling conventions.  At
  89.                this time, it is the default, but may change as different ABIs
  90.                become the future default.
  91.  
  92.      ----66664444       Generate wrappers with 64-bit pointer sizes, and using the 64
  93.                bit calling conventions.
  94.  
  95.      ----nnnn33332222      Generate wrappers with the n32 calling conventions.
  96.  
  97.      ----ffff        Suppress extending floats to doubles across the call. Normally,
  98.                formal parameters of type _f_l_o_a_t in the (K&R) C input to _m_k_f_2_c
  99.                are dereferenced and converted to type _d_o_u_b_l_e across the
  100.                interface, to conform to C calling conventions.  This option
  101.                suppresses the conversion to _d_o_u_b_l_e.  If this option is
  102.                selected, the receiving routine in C should have a _p_r_o_t_o_t_y_p_e
  103.                with the _f_l_o_a_t parameters declared correctly.  For declarations
  104.                input to _m_k_f_2_c in ANSI C style function prototypes float
  105.                arguments are not extended, so ----ffff need not be supplied.
  106.  
  107.      ----oooo _o_u_t_p_u_t Name the output file _o_u_t_p_u_t. If the output filename is not
  108.                specified by a -_o _f_i_l_e_n_a_m_e switch, _m_k_f_2_c will use the second
  109.                filename appearing in its argument list as the output file
  110.                name.  This method must be used if it is desired to generate an
  111.                interface routine in a file when the input is from _s_t_d_i_n.
  112.  
  113.      ----UUUU        Normally, upper case characters appearing in FORTRAN external
  114.                names are mapped to lower case.  This option suppresses that
  115.                mapping, allowing FORTRAN external names to be of mixed case.
  116.                This option should be used in conjunction with the -_U option to
  117.                _f_7_7(_1).
  118.  
  119.      ----ssssiiiiggggnnnneeeedddd,,,,----uuuunnnnssssiiiiggggnnnneeeedddd
  120.                Specify the _s_i_g_n_e_d attribute of single-character parameters.
  121.                The setting of this option determines whether a scalar
  122.                parameter of type _c_h_a_r (in the C input to _m_k_f_2_c), which
  123.                corresponds to a FORTRAN argument of type _c_h_a_r_a_c_t_e_r*_1, should
  124.                be sign-extended across the interface.  The default setting is
  125.                _u_n_s_i_g_n_e_d.
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. MMMMKKKKFFFF2222CCCC((((1111))))                                                              MMMMKKKKFFFF2222CCCC((((1111))))
  137.  
  138.  
  139.  
  140.      ----uuuu        Keep underscores in function names.  By default underscores are
  141.                removed and a warning is issued.
  142.  
  143.      ----llll        By default, _m_k_f_2_c truncates FORTRAN external names to _s_i_x
  144.                characters to conform to the ANSI standard and to be
  145.                backwards-compatible with the IRIS 4D Series.  This switch
  146.                allows the maximum number of characters in FORTRAN external
  147.                names to be the same as that enforced by the FORTRAN front-end
  148.                (currently 32).  If this switch is _n_o_t specified, the FORTRAN
  149.                program should have the C function name truncated to _s_i_x
  150.                characters at the call.
  151.  
  152.      ----wwww        Inhibit the generation of warning messages.  As creating
  153.                _w_r_a_p_p_e_r_s can cause confusion, _m_k_f_2_c gives warning messages for
  154.                constructs which will result in an interface which is
  155.                'unnatural' for C (i.e., in which the C side of the interface
  156.                must take special precautions when accessing the parameters or
  157.                naming the routines).  An example of this would be passing a
  158.                FORTRAN character variable as a C character array.  _M_k_f_2_c knows
  159.                that this situation requires C to use special care when
  160.                manipulating the string, as it is not null-terminated, and,
  161.                hence, it generates a warning message. It is recommended that
  162.                -_w only be used by programmers experienced with the generation
  163.                of _w_r_a_p_p_e_r_s.
  164.  
  165.      ----ccccaaaallllllll____ssssaaaammmmeeee____ddddssssoooo
  166.                This is used when the wrapper and the target C function will be
  167.                placed in the same DSO.  A further optimization is taken which
  168.                removes the restoring of the gp register after the call return.
  169.  
  170. EEEEXXXXAAAAMMMMPPPPLLLLEEEE
  171.      In this example, a FORTRAN program wants to call a C function
  172.      _A_l_l_P_a_r_a_m_e_t_e_r_s with many parameters.  The FORTRAN program is in the file
  173.      _f._f and the C function is in the file _c._c.  These are the only two files
  174.      in the program.  The special comments /*CENTRY*/ and /*ENDCENTRY*/ have
  175.      been added to the C source code to bracket the function for which an
  176.      interface is to be generated.  The C function header is given below:
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. MMMMKKKKFFFF2222CCCC((((1111))))                                                              MMMMKKKKFFFF2222CCCC((((1111))))
  203.  
  204.  
  205.  
  206.           /* CENTRY */
  207.           AllParameters(i,s,c,cptr,ptr1,ptr2,ar1,f,d,d1,struct1,string1,string2,u)
  208.           short s;
  209.           char c,*cptr;
  210.           int *ptr1;
  211.           char *ptr2[];
  212.           short ar1[];
  213.           float f;
  214.           double d,*d1;
  215.           struct test_s *struct1;
  216.           char string1[],string2[30];
  217.           sometype u;
  218.           {
  219.                /*
  220.                The C function body is ignored by _m_k_f_2_c.
  221.                */
  222.           }
  223.           /* ENDCENTRY */
  224.  
  225.      When this function is run through _m_k_f_2_c, a complaint will be given about
  226.      not understanding the type of parameter _u.  It will be assumed to be a
  227.      simple pointer.  Additionally, a warning about passing the parameters
  228.      _s_t_r_i_n_g_1 and _s_t_r_i_n_g_2 as simple pointers will be given.  (These FORTRAN
  229.      character variables each have an associated length which is passed as a
  230.      _h_i_d_d_e_n parameter to the C function, at the end of the parameter list.
  231.      These additional parameters may be accessed by the C function by the use
  232.      of the _v_a_r_a_r_g_s macros.  See the _F_O_R_T_R_A_N _L_a_n_g_u_a_g_e _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l for
  233.      more information.)
  234.  
  235.      The parameter _i will be assumed to be of type _i_n_t, as it is by the C
  236.      compiler _c_c_o_m during compilation.
  237.  
  238.      Several items are noteworthy about the parameters in this example.  The
  239.      parameters _i, _s, _c, _f, and _d will be dereferenced across the call. The
  240.      parameter _f will be extended to a _d_o_u_b_l_e across the call unless the -_f
  241.      switch is given to _m_k_f_2_c(1). The parameters _p_t_r_1, _p_t_r_2, _a_r_1, _d_1, _s_t_r_u_c_t_1,
  242.      _s_t_r_i_n_g_1, and _s_t_r_i_n_g_2 will be passed as simple pointers.  The FORTRAN
  243.      character*1 variable which is passed as _c will be dereferenced and
  244.      extended to a long across the call. If the -_s_i_g_n_e_d switch is specified, _c
  245.      will be sign-extended when being dereferenced.  A copy of parameter _c_p_t_r
  246.      will be made and the copy null-terminated.  A pointer to this copy will
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. MMMMKKKKFFFF2222CCCC((((1111))))                                                              MMMMKKKKFFFF2222CCCC((((1111))))
  269.  
  270.  
  271.  
  272.      be passed.  The C entry point will be named _A_l_l_P_a_r_a_m_e_t_e_r_s.  The FORTRAN
  273.      entry point name depends on whether or not the -_U and/or the -_l switches
  274.      have been given.  The various combinations of these switches and their
  275.      effect is detailed below:
  276.  
  277.                             ___________________________
  278.                              Switches   FORTRAN Entry
  279.                             ___________________________
  280.                              <_n_o_n_e>     allpar_
  281.                              -_l         allparameters_
  282.                              -_U         AllPar_
  283.                              -_l -_U      AllParameters_
  284.                             ___________________________
  285.                             |||||||
  286.  
  287.  
  288.  
  289.  
  290.  
  291.                                       |||||||
  292.  
  293.  
  294.  
  295.  
  296.  
  297.                                                        |||||||
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.      The program can be made easily and the interface generated automatically
  307.      by adding the following special rules to your makefile:
  308.  
  309.  
  310.            # .fc must be added to your SUFFIXES between .c and .o
  311.            .SUFFIXES:
  312.            .SUFFIXES: .o .fc .c .s .f
  313.  
  314.            F2CFLAGS=
  315.            ASFLAGS=-KPIC
  316.  
  317.            test:  f.o c.o
  318.                   f77 -o test f.o c.o
  319.  
  320.            # note -- each .c file containing routines to be interfaced must have
  321.            # a dependency such as the following
  322.            c.o: c.fc
  323.  
  324.            .fc.o:
  325.                    cc $(CFLAGS) -c $*.c
  326.                    mkf2c $(F2CFLAGS) $< $*.s
  327.                    as $(ASFLAGS) -o $*.wo $*.s
  328.                    ld -r $*.o $*.wo -o $*.tmp
  329.                    mv $*.tmp $*.o
  330.                    rm -f $*.s $*.wo
  331.  
  332.            .c.fc:
  333.                    extcentry $*.c $*.fc
  334.  
  335.  
  336.            clean:
  337.                     rm -f *.o test *.fc
  338.  
  339.  
  340.      In the make, the program _e_x_t_c_e_n_t_r_y will be run on _c._c to produce _c._f_c.
  341.      This program (see _e_x_t_c_e_n_t_r_y(1)) will copy to _c._f_c all text in _c._c which
  342.      is between the special comments /* _C_E_N_T_R_Y */ and /* _E_N_D_C_E_N_T_R_Y */.  _M_k_f_2_c
  343.  
  344.  
  345.  
  346.                                                                         PPPPaaaaggggeeee 5555
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353. MMMMKKKKFFFF2222CCCC((((1111))))                                                              MMMMKKKKFFFF2222CCCC((((1111))))
  354.  
  355.  
  356.  
  357.      will then be run on _c._f_c, and the make variable _F_2_C_F_L_A_G_S will be passed
  358.      to it.  The C source will be compiled with _c_c(1) (using _c_c $_C_F_L_A_G_S), and
  359.      the output of _m_k_f_2_c will be assembled (with _a_s $_A_S_F_L_A_G_S).  These two ._os
  360.      will then be loaded together into a single relocatable named _c._o.
  361.  
  362.      If it is desired to pass _m_k_f_2_c(1) some flags (e.g., -_l and -_s_i_g_n_e_d), the
  363.      _m_a_k_e variable _F_2_C_F_L_A_G_S should be set in the makefile, as
  364.  
  365.                F2CFLAGS = -signed -l
  366.  
  367.  
  368. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  369.      extcentry(1), cc(1), FORTRAN Language Reference Manual
  370.  
  371. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  372.      _M_k_f_2_c is very simple-minded about diagnosing syntax errors.  It can
  373.      detect such things as a formal parameter having its type declared when it
  374.      is not in the formal parameter list.  A few such cases give intelligible
  375.      error messages.  The program will complain about types it does not
  376.      understand.  The default type assigned in such cases is _s_i_m_p_l_e _p_o_i_n_t_e_r.
  377.      _M_k_f_2_c will also delete characters from FORTRAN entry names which are
  378.      illegal (e.g., underscores).  The user will be warned in such instances.
  379.      Most errors that the programs detect are indicated only by the source
  380.      line number.
  381.  
  382.      If _m_k_f_2_c encounters an error which it cannot remedy, it will abort,
  383.      giving the line number on which the error occurred.  The resultant ._s
  384.      file will be removed, and an error exit will be taken.
  385.  
  386.      Because of its limited error diagnostic ability, it is advisable to use
  387.      _c_c (_1) to determine whether the input syntax is correct before passing it
  388.      to _m_k_f_2_c.
  389.  
  390. BBBBUUUUGGGGSSSS
  391.      _m_k_f_2_c does not understand the ANSI notation a(void) _a_s _m_e_a_n_i_n_g _a _f_u_n_c_t_i_o_n
  392.      _w_i_t_h _n_o _a_r_g_u_m_e_n_t_s.
  393.  
  394.      In ANSI C style function prototypes, typedef names cannot be used.
  395.  
  396. AAAAUUUUTTTTHHHHOOOORRRR
  397.      Greg Boyd
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.                                                                         PPPPaaaaggggeeee 6666
  413.  
  414.  
  415.  
  416.